package com.bitdf.txing.chat.config;

import cn.dev33.satoken.same.SaSameUtil;
import cn.dev33.satoken.stp.StpUtil;
import com.bitdf.txing.chat.config.handler.WebSocketServerHandler;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;

/**
 * @author Lizhiwei
 * @date 2023/9/8 20:26:32
 * 注释：feign拦截器, 在feign请求发出之前，加入一些操作
 */
@Component
@ConditionalOnProperty(value = "tx.deploy.mode", havingValue = "cloud")
public class FeignInterceptor implements RequestInterceptor {
    // 为 Feign 的 RCP调用 添加请求头Same-Token
    @Override
    public void apply(RequestTemplate requestTemplate) {

        String token = WebSocketServerHandler.threadLocal.get();
        if (token != null) {
            requestTemplate.header(StpUtil.getTokenName(), token);
        } else {
            // 如果希望被调用方有会话状态，此处就还需要将 satoken 添加到请求头中
            requestTemplate.header(StpUtil.getTokenName(), StpUtil.getTokenValue());
        }
        requestTemplate.header(SaSameUtil.SAME_TOKEN, SaSameUtil.getToken());
    }
}